home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / yspred / sprite.c next >
Text File  |  1993-07-08  |  1KB  |  59 lines

  1. #include <spr.h>
  2.  
  3. void SPR_setPosiAndAttr(int ns,int xs,int ys,int x,int y,int atr,int col)
  4. {
  5.     int pn,lx,ly,spp,stx,sty,i,j,rol,tmp;
  6.  
  7.     if((atr & 0x7c00)==0)
  8.     {
  9.         SPR_setPosition(0,ns,xs,ys,x,y);
  10.         SPR_setAttribute(ns,xs,ys,atr,col);
  11.         return;
  12.     }
  13.  
  14.     if(atr & 0x0400)lx=8; else lx=16;
  15.     if(atr & 0x0800)ly=8; else ly=16;
  16.  
  17.     if(col & 0x8000)spp=1;  else spp=4;
  18.  
  19.     rol=(atr & 0x7000)/0x1000;
  20.     if(4<=rol && rol<8){tmp=xs; xs=ys; ys=tmp;}
  21.     switch(rol)
  22.     {
  23.     case 0:    stx= 1;  sty= 0;       pn=0;
  24.             break;
  25.     case 1:    stx= 1;  sty=-xs*2;    pn=xs*(ys-1);
  26.             break;
  27.     case 2:    stx=-1;  sty= xs*2;    pn=xs-1;
  28.             break;
  29.     case 3:    stx=-1;  sty= 0;       pn=xs*ys-1;
  30.             break;
  31.     case 4: stx= ys; sty=1-xs*ys;  pn=0;
  32.             break;
  33.     case 5:    stx= ys; sty=-xs*ys-1; pn=ys-1;
  34.             break;
  35.     case 6:    stx=-ys; sty=1+xs*ys;  pn=ys*(xs-1);
  36.             break;
  37.     case 7:    stx=-ys; sty= xs*ys-1; pn=xs*ys-1;
  38.             break;
  39.     }
  40.  
  41.     xs*=spp;
  42.     ys*=spp;
  43.     pn=(atr & 1023)+pn*spp;
  44.     atr=(atr&0xfc00);
  45.  
  46.     for(j=0; j<ys; j++)
  47.     {
  48.         for(i=0; i<xs; i++)
  49.         {
  50.             SPR_setPosition(0,ns,1,1,x+i*lx,y+j*ly);
  51.             SPR_setAttribute(ns,1,1,atr+pn,col);
  52.             ns++;
  53.             pn+=stx;
  54.         }
  55.         pn+=sty;
  56.     }
  57. }
  58.  
  59.